package br.com.linkin.web.mi.actions;

import br.com.linkin.cte.constants.Atributos;
import br.com.linkin.mi.service.ServiceException;
import br.com.linkin.mi.utils.log.Logger;
import br.com.linkin.web.mi.delegate.CteDelegate;
import br.com.linkin.web.mi.forms.CteForm;
import br.com.linkin.web.mi.validation.BaseValidation;
import br.com.linkin.web.mi.vo.Message;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author daniel.mendonca
 */
public class CteAction extends BaseAction {

    CteDelegate delegate = new CteDelegate();

    /**
     * cte Status Servico
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward cteStatusServico(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        CteForm importForm = (CteForm) form;
        List<Message> listMsg = new ArrayList<Message>();

        if (BaseValidation.isInvalid(importForm.getCteCabecMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_CABEC_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_CABEC_MSG);
        }

        if (BaseValidation.isInvalid(importForm.getCteDadosMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_DADOS_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_DADOS_MSG);
        }

        if (!listMsg.isEmpty()) {
            super.setMessage(request, listMsg);
        } else {
            try {

                importForm.setResult(delegate.cteStatusServico(importForm.getCteCabecMsg(), importForm.getCteDadosMsg()));
                super.setMessage(request, "mensagem.concluido", Atributos.METHOD_CTE_STATUS_SERVICO);
                
                return mapping.findForward("result");
                
            } catch (ServiceException e) {
                Logger.erro(getMessage(request, "mensagem.concluido.erro"), e, Atributos.METHOD_CTE_CANCELAMENTO);
                super.setMessage(request, "mensagem.concluido.erro", Atributos.METHOD_CTE_STATUS_SERVICO);
            }
        }
        return mapping.findForward("mensagem");
    }

    /**
     * cte Ret Recepcao
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward cteRetRecepcao(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        CteForm importForm = (CteForm) form;
        List<Message> listMsg = new ArrayList<Message>();

        if (BaseValidation.isInvalid(importForm.getCteCabecMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_CABEC_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_CABEC_MSG);
        }

        if (BaseValidation.isInvalid(importForm.getCteDadosMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_DADOS_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_DADOS_MSG);
        }

        if (!listMsg.isEmpty()) {
            super.setMessage(request, listMsg);
        } else {
            try {

                importForm.setResult(delegate.cteRetRecepcao(importForm.getCteCabecMsg(), importForm.getCteDadosMsg()));
                super.setMessage(request, "mensagem.concluido", Atributos.METHOD_CTE_RET_RECEPCAO);
                
                return mapping.findForward("result");
                
            } catch (ServiceException e) {
                Logger.erro(getMessage(request, "mensagem.concluido.erro"), e, Atributos.METHOD_CTE_CANCELAMENTO);
                super.setMessage(request, "mensagem.concluido.erro", Atributos.METHOD_CTE_RET_RECEPCAO);
            }
        }
        return mapping.findForward("mensagem");
    }

    /**
     * cte Recepcao
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward cteRecepcao(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        CteForm importForm = (CteForm) form;
        List<Message> listMsg = new ArrayList<Message>();

        if (BaseValidation.isInvalid(importForm.getCteCabecMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_CABEC_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_CABEC_MSG);
        }

        if (BaseValidation.isInvalid(importForm.getCteDadosMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_DADOS_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_DADOS_MSG);
        }

        if (!listMsg.isEmpty()) {
            super.setMessage(request, listMsg);
        } else {
            try {

                importForm.setResult(delegate.cteRecepcao(importForm.getCteCabecMsg(), importForm.getCteDadosMsg()));
                super.setMessage(request, "mensagem.concluido", Atributos.METHOD_CTE_RECEPCAO);
                
                return mapping.findForward("result");
                
            } catch (ServiceException e) {
                Logger.erro(getMessage(request, "mensagem.concluido.erro"), e, Atributos.METHOD_CTE_CANCELAMENTO);
                super.setMessage(request, "mensagem.concluido.erro", Atributos.METHOD_CTE_RECEPCAO);
            }
        }
        return mapping.findForward("mensagem");
    }

    /**
     * cte Inutilizacao
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward cteInutilizacao(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        CteForm importForm = (CteForm) form;
        List<Message> listMsg = new ArrayList<Message>();

        if (BaseValidation.isInvalid(importForm.getCteCabecMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_CABEC_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_CABEC_MSG);
        }

        if (BaseValidation.isInvalid(importForm.getCteDadosMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_DADOS_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_DADOS_MSG);
        }

        if (!listMsg.isEmpty()) {
            super.setMessage(request, listMsg);
        } else {
            try {

                importForm.setResult(delegate.cteInutilizacao(importForm.getCteCabecMsg(), importForm.getCteDadosMsg()));
                super.setMessage(request, "mensagem.concluido", Atributos.METHOD_CTE_INULTILIZACAO);
                
                return mapping.findForward("result");
                
            } catch (ServiceException e) {
                Logger.erro(getMessage(request, "mensagem.concluido.erro"), e, Atributos.METHOD_CTE_CANCELAMENTO);
                super.setMessage(request, "mensagem.concluido.erro", Atributos.METHOD_CTE_INULTILIZACAO);
            }
        }
        return mapping.findForward("mensagem");
    }

    /**
     * cte Consulta
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward cteConsulta(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        CteForm importForm = (CteForm) form;
        List<Message> listMsg = new ArrayList<Message>();

        if (BaseValidation.isInvalid(importForm.getCteCabecMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_CABEC_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_CABEC_MSG);
        }

        if (BaseValidation.isInvalid(importForm.getCteDadosMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_DADOS_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_DADOS_MSG);
        }

        if (!listMsg.isEmpty()) {
            super.setMessage(request, listMsg);
        } else {
            try {

                importForm.setResult(delegate.cteConsulta(importForm.getCteCabecMsg(), importForm.getCteDadosMsg()));
                super.setMessage(request, "mensagem.concluido", Atributos.METHOD_CTE_CONSULTA);
                
                return mapping.findForward("result");
                
            } catch (ServiceException e) {
                Logger.erro(getMessage(request, "mensagem.concluido.erro"), e, Atributos.METHOD_CTE_CANCELAMENTO);
                super.setMessage(request, "mensagem.concluido.erro", Atributos.METHOD_CTE_CONSULTA);
            }
        }
        return mapping.findForward("mensagem");
    }

    /**
     * cte Cancelamento
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward cteCancelamento(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        CteForm importForm = (CteForm) form;
        List<Message> listMsg = new ArrayList<Message>();

        if (BaseValidation.isInvalid(importForm.getCteCabecMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_CABEC_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_CABEC_MSG);
        }

        if (BaseValidation.isInvalid(importForm.getCteDadosMsg())) {
            listMsg.add(new Message("mensagem.dado.invalido", Atributos.CTE_DADOS_MSG));
            Logger.informacao(getMessage(request, "mensagem.dado.invalido"), Atributos.CTE_DADOS_MSG);
        }

        if (!listMsg.isEmpty()) {
            super.setMessage(request, listMsg);
        } else {
            try {

                importForm.setResult(delegate.cteCancelamento(importForm.getCteCabecMsg(), importForm.getCteDadosMsg()));
                super.setMessage(request, "mensagem.concluido", Atributos.METHOD_CTE_CANCELAMENTO);
                
                return mapping.findForward("result");
                
            } catch (ServiceException e) {
                Logger.erro(getMessage(request, "mensagem.concluido.erro"), e, Atributos.METHOD_CTE_CANCELAMENTO);
                super.setMessage(request, "mensagem.concluido.erro", Atributos.METHOD_CTE_CANCELAMENTO);
            }
        }
        return mapping.findForward("mensagem");
    }
}
